package com.lottemall.search.pojo;

import com.lottemall.common.vo.PageResult;
import com.lottemall.item.pojo.Brand;
import com.lottemall.item.pojo.Category;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 由于前台需要商品的分类和品牌，但是我们不可能直接查询所有，需要从用户的搜索商品结果中过滤聚合得到分类和品牌
 * 这样 原来的PageResult就不够用了
 */
@Data
public class SearchResult extends PageResult<Goods> {
    /**
     * 商品类型集合  带选项
     */
    private List<Category> categories;

    /**
     * 商品品牌集合 带选项
     */
    private List<Brand> brands;

    private List<Map<String, Object>> specs; // 规格参数过滤条件 key及待选项

    public SearchResult() {
    }

    /**
     * 这个构造函数比较特殊 需要传商品集合
     * <p>
     * 像这种构造函数比较长的时候，其实可以用工厂模式，用一些固定的方法构建一些对象
     *
     * @param total
     * @param totalPage
     * @param items
     * @param categories
     * @param brands
     */
    public SearchResult(Long total, Integer totalPage, List<Goods> items,
                        List<Category> categories, List<Brand> brands) {
        super(total, totalPage, items);
        this.categories = categories;
        this.brands = brands;
    }

    /**
     * 后面扩展，需要返回规格参数给用户选择
     *
     * @param total
     * @param totalPage
     * @param items
     * @param categories
     * @param brands
     * @param specs
     */
    public SearchResult(Long total, Integer totalPage, List<Goods> items,
                        List<Category> categories, List<Brand> brands,
                        List<Map<String, Object>> specs) {
        super(total, totalPage, items);
        this.categories = categories;
        this.brands = brands;
        this.specs = specs;
    }
}